home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Telnet / Comet.3.0.7 Folder / ibm-host-software / FTCMS.ASSEMBLE < prev    next >
Text File  |  1992-09-09  |  32KB  |  395 lines

  1. FTCMS  TITLE 'PARAMETER PARSING AND FILE SYSTEM INTERFACE FOR FT3270.'  00010000
  2. *********************************************************************   00020000
  3. *                                                                   *   00030000
  4. *      THIS MODULE IS CALLED BY FT3270 TO PROCESS THE COMMAND LINE  *   00040000
  5. *   ARGUMENTS. THE ADDRESS OF A DSECT IS PASSED IN R11.             *   00050000
  6. *      THE HIGH ORDER BYTE OF R1 IS EXAMINED TO DETERMINE WHETHER   *   00060000
  7. *   NOT TO USE THE EXTENDED PLIST POINTER IN R0.                    *   00070000
  8. *      THIS MODULE IS ALSO CALLED TO PERFORM FSREADS, FSWRITES,     *   00080000
  9. *   AND FSCLOSE. INFORMATION IS PASSED IN THE REGISTERS. SEE FTFS.  *   00090000
  10. *                                                                   *   00100000
  11. *   1ST ARG IS LOCAL FILESPEC AND MAY BE MULTIPLE TOKENS IF IT      *   00110000
  12. *   IS ENCLOSED IN DOUBLE QUOTES.                                   *   00120000
  13. *   2ND ARG IS CONTROL BYTE (SEE INIT2).                            *   00130000
  14. *   3RD, 4TH, & 5TH ARGS ARE CMS FILENAME, FILETYPE, & FILEMODE.    *   00140000
  15. *                                                                   *   00150000
  16. *                                                                   *   00160000
  17. *   FTERR IS CALLED TO PRINT ANY ERROR MESSAGE.                     *   00170000
  18. *                                                                   *   00180000
  19. *            PETER HOYT          CORNELL COMPUTER SERVICES          *   00190000
  20. *            VERSION 2.0         AUGUST 30, 1987                    *   00200000
  21. *                                                                   *   00210000
  22. *   SOURCE FILE SEQUENCED FOR FUTURE MAINTANENCE.  LARRY CHACE      *   00220000
  23. *                                                                   *   00230000
  24. *********************************************************************   00240000
  25. *                                                                       00250000
  26. FTCMS    CSECT                                                          00260000
  27.          EXTRN FTERR                                                    00270000
  28.          ENTRY FTFS                                                     00280000
  29.          USING FTCMS,R12                                                00290000
  30.          USING FTCOMMON,R11                                             00300000
  31. *                                                                       00310000
  32.          STM   R14,R12,12(R13)     SAVE THE CALLER'S THINGS.            00320000
  33.          LR    R12,R15             GET OUR BASE ADDRESS.                00330000
  34.          ST    R13,SAVEAREA+4      SAVE HIS SAVE AREA AND               00340000
  35.          LA    R13,SAVEAREA          GET OURS.                          00350000
  36. *                                                                       00360000
  37.          BAL   R14,INIT1           PROCESS 1ST ARG (DOS FILESPEC)       00370000
  38.          BAL   R14,INIT2           PROCESS 2ND ARG (CONTROL BYTE)       00380000
  39.          BAL   R14,INIT3           PROCESS CMS FILEID & MISC DUTIES.    00390000
  40. *                                                                       00400000
  41. DONE     L     R13,4(,R13)         RESTORE EVERYTHING                   00410000
  42.          LM    R14,R12,12(R13)       FROM THE CALLER                    00420000
  43.          SR    R15,R15               AND RETURN WITH                    00430000
  44.          BR    R14                   A NICE CODE.                       00440000
  45. *                                                                       00450000
  46. ****  PUT OUT ERROR MESSAGE & RETURN WITH A NON-ZERO RETURN CODE        00460000
  47. *                                                                       00470000
  48. ADONE    L     R3,RETCODE          PASS ERROR CODES IN R2 & R3          00480000
  49.          LR    R2,R15                                                   00490000
  50.          L     R15,=A(FTERR)                                            00500000
  51.          BALR  R14,R15             UPDATED RC RETURNED IN R15           00510000
  52.          L     R13,4(,R13)         RESTORE EVERYTHING                   00520000
  53.          L     R14,12(R13)           FROM THE CALLER                    00530000
  54.          LM    R0,R12,20(R13)        EXCEPT R15!                        00540000
  55.          BR    R14                                                      00550000
  56.          EJECT                                                          00560000
  57. *---------------------------------------------------------------------* 00570000
  58. *                ERROR HANDLER                                        * 00580000
  59. *---------------------------------------------------------------------* 00590000
  60. PERR0    DS    0H                  END OF PLIST ENCOUNTERED             00600000
  61.          MVI   RETCODE+3,40                                             00610000
  62.          B     ADONE                                                    00620000
  63. PERR1    MVI   RETCODE+3,41        D OR U                               00630000
  64.          B     ADONE                                                    00640000
  65. PERR2    MVI   RETCODE+3,42        B OR T                               00650000
  66.          B     ADONE                                                    00660000
  67. PERR3    MVI   RETCODE+3,43        R OR N                               00670000
  68.          B     ADONE                                                    00680000
  69. PERR4    MVI   RETCODE+3,44        LRECL                                00690000
  70.          B     ADONE                                                    00700000
  71. PERR5    MVI   RETCODE+3,45        Q DISK FAILURE                       00710000
  72.          B     ADONE                                                    00720000
  73. PERR6    MVI   RETCODE+3,46        ALREADY EXISTS                       00730000
  74.          B     ADONE                                                    00740000
  75. PERR7    MVI   RETCODE+3,47        LRECL > 64K                          00750000
  76.          B     ADONE                                                    00760000
  77. PERR8    MVI   RETCODE+3,48        LOCAL FILESPEC                       00770000
  78.          B     ADONE                                                    00780000
  79. NOMEM    MVI   RETCODE+3,50        DMSFREE FAILURE                      00790000
  80.          B     ADONE                                                    00800000
  81. FSSERR   MVI   RETCODE+3,52        FSSTATE FAILURE                      00810000
  82.          B     ADONE                                                    00820000
  83.          EJECT                                                          00830000
  84. *---------------------------------------------------------------------* 00840000
  85. *   PROCESS LOCAL FILESPEC WHICH IS PASSED AS FIRST AGRUMENT.         * 00850000
  86. *      & MOVE IT INTO THE NEGOTIATION BUFFER.                         * 00860000
  87. *   CHECK FOR EXTENDED PLIST & LEADING DOUBLE QUOTE.                  * 00870000
  88. *---------------------------------------------------------------------* 00880000
  89. INIT1    DS    0H                                                       00890000
  90.          ST    R14,XINIR14         SAVE OUR RETURN POINTER.             00900000
  91.          CLC   =X'FFFFFFFF',8(R1)  CAN'T BE END OF PLIST YET!           00910000
  92.          BZ    PERR0                                                    00920000
  93.          LA    R6,NEGO+7           WHERE WE WANT TO MOVE THE FILESPEC.  00930000
  94.          SR    R7,R7               OFFSET INTO TARGET BUFFER            00940000
  95. *                                                                       00950000
  96.          LR    R3,R1               MAKE SURE EXTENDED PLIST IS USED     00960000
  97.          SRL   R3,24                 BY CHECKING HIGH ORDER BYTE.       00970000
  98.          LTR   R3,R3               ZERO IS WIERD                        00980000
  99.          BZ    I21                                                      00990000
  100.          C     R3,=F'11'           1, 2, 5, 6, & 11 OK                  01000000
  101.          BC    2,I21                                                    01010000
  102.          LR    R8,R0               POINTER TO UNFORMATED PARM AREA.     01020000
  103.          L     R8,4(R8)            POINTER TO START OF PLIST.           01030000
  104.          LA    R9,80                  MAXIMUM LENGTH                    01040000
  105.          B     I22                                                      01050000
  106. I21      LA    R8,8(R1)            USE FORMATTED PLIST FOR DOS FILESPEC 01060000
  107.          LA    R9,8                   MAXIMUM LENGTH                    01070000
  108. *                                                                       01080000
  109. I22      IC    R3,0(R7,R8)         LOAD THE FIRST BYTE FROM PLIST.      01090000
  110.          CLM   R3,1,=X'7F'         SPECIAL CASE FOR DOUBLE QUOTE        01100000
  111.          BNE   I33                                                      01110000
  112.          BAL   R14,INIT1A                                               01120000
  113.          B     I34                                                      01130000
  114. *                                                                       01140000
  115. I33      IC    R3,0(R7,R8)         LOAD THE NEXT BYTE FROM PLIST.       01150000
  116.          CLM   R3,1,=X'40'         IF IT'S A BLANK WE'RE DONE.          01160000
  117.          BZ    I34                                                      01170000
  118.          STC   R3,0(R7,R6)         NOW STORE THE CHARACTER IN FILESPEC. 01180000
  119.          LA    R7,1(,R7)           INCREMENT INDEX REGISTER AND         01190000
  120.          CR    R7,R9                 CHECK FOR LENGTH                   01200000
  121.          BNZ   I33                 GET THE NEXT CHARACTER FROM PLIST.   01210000
  122. *                                                                       01220000
  123. I34      LTR   R7,R7               MAKE SURE FILESPEC NOT ZERO LENGTH   01230000
  124.          BZ    PERR8                                                    01240000
  125.          C     R7,=F'80'           MAKE SURE FILESPEC FITS IN BUFFER.   01250000
  126.          BC    2,PERR8                                                  01260000
  127.          SR    R3,R3               STORE A NULL AT END OF FILESPEC.     01270000
  128.          STC   R3,0(R7,R6)                                              01280000
  129.          LA    R7,1(,R7)           INC. DUE TO NULLS AT END OF STRING.  01290000
  130.          ST    R7,FSPECLEN         STORE LENGTH OF FILESPEC.            01300000
  131.          L     R14,XINIR14         RESTORE AND                          01310000
  132.          BR    R14                   RETURN.                            01320000
  133. XINIR14  DS    F                   INIT R14 SAVE AREA.                  01330000
  134.          EJECT                                                          01340000
  135. *---------------------------------------------------------------------* 01350000
  136. *   PROCESS LOCAL FILESPEC WHICH IS PASSED AS FIRST AGRUMENT          * 01360000
  137. *      WHEN IT HAS BEEN PRECEEDED BY DOUBLE QUOTES.                   * 01370000
  138. *   IN THAT CASE MULTIPLE TOKENS ARE PERMITTED AND MORE THAN          * 01380000
  139. *      ONE CONSECUTIVE BLANK MAY OCCUR IN THE FILESPEC.               * 01390000
  140. *---------------------------------------------------------------------* 01400000
  141. INIT1A   DS    0H                                                       01410000
  142.          ST    R14,XINAR14         SAVE OUR RETURN POINTER.             01420000
  143.          LA    R8,1(,R8)           SKIP THE DOUBLE QUOTE                01430000
  144.          LA    R5,X'40'            LOAD A BLANK CHARACTER TO START      01440000
  145. *                                                                       01450000
  146. I41      IC    R3,0(R7,R8)         LOAD THE NEXT BYTE FROM PLIST.       01460000
  147.          CLM   R3,1,=X'7F'         IF IT'S A DOUBLE QUOTE WE'RE DONE.   01470000
  148.          BE    I43                                                      01480000
  149.          CLM   R3,1,=X'40'         CHECK FOR BLANK                      01490000
  150.          BNE   I42                 IF NOT CONTINUE                      01500000
  151.          CLM   R5,1,=X'40'         IF SO CHECK PREVIOUS CHARACTER.      01510000
  152.          BE    I42                 IF IT'S ALSO BLANK THEN CONTINUE     01520000
  153.          LA    R1,8(,R1)           OTHERWISE INC. FORMATTED PLIST       01530000
  154. *                                                                       01540000
  155. I42      STC   R3,0(R7,R6)         NOW STORE THE CHARACTER IN FILESPEC. 01550000
  156.          LR    R5,R3               SAVE PREVIOUS CHARACTER IN R5        01560000
  157.          LA    R7,1(,R7)           INCREMENT INDEX REGISTER AND         01570000
  158.          CR    R7,R9                 CHECK FOR LENGTH                   01580000
  159.          BNZ   I41                 GET THE NEXT CHARACTER FROM PLIST.   01590000
  160. *                                                                       01600000
  161. I43      L     R14,XINAR14         RESTORE AND                          01610000
  162.          BR    R14                   RETURN.                            01620000
  163. XINAR14  DS    F                   INIT R14 SAVE AREA.                  01630000
  164.          EJECT                                                          01640000
  165. *---------------------------------------------------------------------* 01650000
  166. *     PROCESS CONTROL PARAMETER WHICH IS PASSED AS 2ND AGRUMENT.      * 01660000
  167. *        FORMAT OF CONTROL PARM: (LEFT TO RIGHT)                      * 01670000
  168. *          BYTE 0: "D" (DOWNLOAD) OR "U" (UPLOAD)                     * 01680000
  169. *          BYTE 1: "T" (TEXT) OR "B" (BINARY) - CONVERSION SWITCH.    * 01690000
  170. *                  "D" (DEFAULT) LETS THE PC DETERMINE CONVERSION.    * 01700000
  171. *          BYTE 2: "R" (REPLACE) OR "N" - REPLACE EXISTING FILE.      * 01710000
  172. *          BYTES 3 THRU 7: VALID ONLY FOR UPLOAD; IF NON BLANK        * 01720000
  173. *         INDICATE RECFM=F AND LRECL=NUMBER SPECIFIED LEFT JUSTIFIED. * 01730000
  174. *---------------------------------------------------------------------* 01740000
  175. INIT2    DS    0H                                                       01750000
  176.          ST    R14,XINIR14         SAVE OUR RETURN POINTER.             01760000
  177.          CLC   =X'FFFFFFFF',16(R1)  CAN'T BE END OF PLIST YET!          01770000
  178.          BZ    PERR0                                                    01780000
  179.          CLI   16(R1),C'D'                                              01790000
  180.          BE    I51                 GOOD GUESS SO CONTINUE.              01800000
  181.          CLI   16(R1),C'U'                                              01810000
  182.          BNE   PERR1               MUST BE ONE OR THE OTHER.            01820000
  183. I51      MVC   UPDOWN(1),16(R1)    SAVE INDICATION OF WHICH DIRECTION   01830000
  184. *                                                                       01840000
  185.          LA    R3,0                LOW BYTE WILL BE PASSED TO TN3270.   01850000
  186.          MVC   BINTEXT,17(R1)      SAVE WHETHER TO DO CONVERSION.       01860000
  187.          CLI   17(R1),C'B'         BINARY OR TEXT FILE?                 01870000
  188.          BZ    I52                 NO CHANGE TO LOW BYTE                01880000
  189.          CLI   17(R1),C'T'                                              01890000
  190.          BNE   I54                 GO TEST FOR DEFAULT.                 01900000
  191.          O     R3,=X'00000002'     TURN ON BIT INDICATING CONVERSION.   01910000
  192.          B     I52                 CONTINUE...                          01920000
  193. I54      CLI   17(R1),C'D'         FINAL TEST OF THIS BYTE.             01930000
  194.          BNE   PERR2               FAILURE HERE IS AN ERROR.            01940000
  195.          O     R3,=X'00000004'     TURN ON BIT INDICATING DEFAULT.      01950000
  196. *                                                                       01960000
  197. I52      MVC   REPLACE,18(R1)      SAVE WHETHER TO REPLACE FILE.        01970000
  198.          CLI   18(R1),C'N'         WILL NOT REPLACE FILE.               01980000
  199.          BZ    I53                                                      01990000
  200.          CLI   18(R1),C'R'                                              02000000
  201.          BNE   PERR3               MUST BE ONE OR THE OTHER.            02010000
  202.          O     R3,=X'00000001'     TURN ON BIT INDICATING REPLACEMENT.  02020000
  203. I53      STC   R3,NEGO+6           BITS TO PASS TO TN3270.              02030000
  204. *                                                                       02040000
  205.          CLI   16(R1),C'D'         WE ARE NOT INTERESTED IN LRECL       02050000
  206.          BZ    I59                  ON DOWNLOADS.                       02060000
  207.          BAL   R14,GETLRECL                                             02070000
  208. *                                                                       02080000
  209. I59      L     R14,XINIR14         RESTORE AND                          02090000
  210.          BR    R14                   RETURN.                            02100000
  211.          EJECT                                                          02110000
  212. *---------------------------------------------------------------------* 02120000
  213. *     PROCESS BYTES 3 THRU 7 OF CONTROL PARM TO DETERMINE LRECL       * 02130000
  214. *        OF FIXED LENGTH FILE TO STORE ON CMS DISK.                   * 02140000
  215. *---------------------------------------------------------------------* 02150000
  216. GETLRECL DS    0H                                                       02160000
  217.          MVI   CRECFM+3,C'V'                                            02170000
  218.          SR    R4,R4               CLEAR PRODUCT.                       02180000
  219.          CLI   19(R1),C' '         IF IT'S BLANK THEN RECFM=V.          02190000
  220.          BZR   R14                   SO WE'RE DONE HERE                 02200000
  221.          MVI   CRECFM+3,C'F'       OTHERWISE LENGTH GIVEN FOR RECFM=F.  02210000
  222.          LR    R5,R1               WE ARE GOING TO ALTER THIS REGISTER. 02220000
  223.          LA    R6,5                MAXIMUM NUMBER OF DIGITS TO PROCESS. 02230000
  224. *                                                                       02240000
  225. GL2      CLI   19(R5),C' '         SEE IF ANOTHER DIGIT TO PROCESS.     02250000
  226.          BZ    GL1                 GUESS WE ARE DONE!                   02260000
  227.          TM    19(R5),X'F0'        MAKE SURE CHARACTER IS A DIGIT.      02270000
  228.          BC    14,PERR4                                                 02280000
  229.          MH    R4,=H'10'           SHIFT PRODUCT BY FACTOR OF 10.       02290000
  230.          IC    R3,19(R5)           NOW GET THE DIGIT FROM PARAMETER.    02300000
  231.          N     R3,=X'0000000F'     GET RID OF "ZONE".                   02310000
  232.          AR    R4,R3               ADD IT TO PRODUCT.                   02320000
  233.          LA    R5,1(,R5)           NEXT DIGIT IN PARMS.                 02330000
  234.          BCT   R6,GL2              GET ANOTHER ONE IF NOT AT END OF ARG 02340000
  235. *                                                                       02350000
  236. GL1      C     R4,CLRECL           MAX LRECL = 64K                      02360000
  237.          BC    10,PERR7                                                 02370000
  238.          ST    R4,CLRECL           SAVE THE CHOSEN LRECL.               02380000
  239.          BR    R14                   RETURN.                            02390000
  240. *---------------------------------------------------------------------* 02400000
  241. *     MISCELLANEOUS PARAMETER PROCESSING & INITIALIZATION:            * 02410000
  242. *        1) GET CMS FILENAME FILETYPE FILEMODE.                       * 02420000
  243. *        2) DO "Q DISK" TO GET BLOCKSIZE & CALC. FREE SPACE.          * 02430000
  244. *        3) DO AN FSSTATE AND VARIOUS EDITS.                          * 02440000
  245. *---------------------------------------------------------------------* 02450000
  246. INIT3    DS    0H                                                       02460000
  247.          ST    R14,XINIR14         SAVE OUR RETURN POINTER.             02470000
  248.          CLC   =X'FFFFFFFF',24(R1)  CAN'T BE END OF PLIST YET!          02480000
  249.          BZ    PERR0               THE PURPOSE OF THIS CODE IS TO       02490000
  250.          CLC   =X'FFFFFFFF',32(R1)   GET CMS FILENAME ETC.              02500000
  251.          BZ    PERR0                                                    02510000
  252.          CLC   =X'FFFFFFFF',40(R1)                                      02520000
  253.          BZ    PERR0                                                    02530000
  254.          MVC   XFSCB+8(18),24(R1)  MOVE ARGS FOR CMS FILE.              02540000
  255. *                                                                       02550000
  256.          BAL   R14,QDISK           GET BLKSIZE & BLKS LEFT.             02560000
  257.          BAL   R14,CMSINIT         DO THE FSSTATE.                      02570000
  258.          L     R14,XINIR14         RESTORE AND                          02580000
  259.          BR    R14                   RETURN.                            02590000
  260.          EJECT                                                          02600000
  261. *---------------------------------------------------------------------* 02610000
  262. *    THIS ROUTINE VERIFIES CHOSEN MINIDISK & CALCS FREE SPACE ON IT.  * 02620000
  263. *---------------------------------------------------------------------* 02630000
  264. QDISK    DS    0H                                                       02640000
  265.          ST    R14,XQD14              SAVE RETURN ADDRESS.              02650000
  266.          LA    R5,40(,R1)             DISK MODE LETTER PASSED HERE      02660000
  267.          USING NUCON,0                                                  02670000
  268.          LA    R10,IADT+ADTPTR-ADTSECT  POINT TO POINTER TO FIRST.      02680000
  269.          DROP  0                                                        02690000
  270.          USING ADTSECT,R10                                              02700000
  271. *                                                                       02710000
  272. ADTLOOP  DS    0H                    THIS CODE THANKS TO K. FRIEDMAN    02720000
  273.          L     R10,ADTPTR            FIND FIRST/NEXT ADT                02730000
  274.          LTR   R10,R10               IF NONE,                           02740000
  275.          BZ    PERR5                  THEN DISK IS NOT ACCESSED.        02750000
  276.          CLC   ADTM,0(R5)            IS THIS THE DISK MODE REQUESTED?   02760000
  277.          BE    ADT10                 YES -> OUR SEARCH IS OVER.         02770000
  278.          B     ADTLOOP                NO -> LOOK SOME MORE              02780000
  279. ADT10    DS    0H                                                       02790000
  280.          L     R6,ADTDBSIZ           GET DISK BLOCK SIZE                02800000
  281.          LTR   R6,R6                 IF ZERO,                           02810000
  282.          BZ    PERR5                    WE CAN'T DEAL WITH IT.          02820000
  283.          L     R15,ADTDTA            LOOK IN DEVICE TABLE.              02830000
  284.          CLC   0(2,R15),=H'0'        IF NO VIRTUAL DEVICE,              02840000
  285.          BZ    PERR5                    WE CAN'T DEAL WITH IT.          02850000
  286.          ST    R6,XBLKSIZE                                              02860000
  287. *                                                                       02870000
  288.          L     R5,ADTNUM             GET NUMBER OF BLOCKS ON DISK       02880000
  289.          S     R5,ADTUSED            SUBTRACT NUMBER IN USE             02890000
  290.          SR    R4,R4                  CLEAR HIGH MULTIPLICAND.          02900000
  291.          MR    R4,R6                                                    02910000
  292.          ST    R5,BYTELEFT            NUMBER OF BYTES AVAILABLE         02920000
  293. *                                                                       02930000
  294.          DROP  R10                                                      02940000
  295.          L     R14,XQD14              RESTORE AND                       02950000
  296.          BR    R14                      RETURN.                         02960000
  297. XQD14    DS    F                                                        02970000
  298.          EJECT                                                          02980000
  299. *---------------------------------------------------------------------* 02990000
  300. *        THIS CODE DEALS WITH THE CMS FILE IN QUESTION.               * 03000000
  301. *---------------------------------------------------------------------* 03010000
  302. CMSINIT  DS    0H                                                       03020000
  303.          ST    R14,XCMS14                                               03030000
  304.          FSSTATE FSCB=XFSCB,ERROR=CMS1,FORM=E                           03040000
  305.          CLI   UPDOWN,C'D'         IS THIS A DOWNLOAD?                  03050000
  306.          BZ    CMS2                PROCEED TO CALCULATE FILESIZE.       03060000
  307.          CLI   REPLACE,C'N'        FILE ALREADY EXISTS FOR UPLOAD...    03070000
  308.          BZ    PERR6                 SO WE CAN'T CLOBBER IT.            03080000
  309.          FSERASE FSCB=XFSCB        OTHERWISE ERASE IT                   03090000
  310.          B     CMS9                  AND CONTINUE.                      03100000
  311. *                                                                       03110000
  312. CMS1     CLI   UPDOWN,C'D'         IS THIS A DOWNLOAD?                  03120000
  313.          BZ    FSSERR              SOMETHING IS AMISS..                 03130000
  314.          C     R15,=F'28'          FILE NOT FOUND OK ON UPLOAD.         03140000
  315.          BZ    CMS9                                                     03150000
  316.          B     FSSERR              OTHER ERROR NOT OK.                  03160000
  317. *                                                                       03170000
  318. CMS2     L     R6,32(R1)           GET THE LRECL.                       03180000
  319.          L     R5,48(R1)           GET NUMBER OF RECORDS                03190000
  320.          ST    R5,XNOREC           WE NEED HIM LATER.                   03200000
  321.          SR    R4,R4               CLEAR MULTIPLICAND.                  03210000
  322.          MR    R4,R6               MAX FILESIZE IN BYTES IS..           03220000
  323.          ST    R5,NUMBYTES           LRECL TIMES NUMBER OF RECORDS.     03230000
  324.          L     R6,XBLKSIZE         NOW TRY THE OTHER WAY...             03240000
  325.          L     R5,44(R1)           LOAD NUMBER OF BLOCKS.               03250000
  326.          MR    R4,R6                                                    03260000
  327.          CL    R5,NUMBYTES         SEE WHICH NUMBER IS LOWER..          03270000
  328.          BC    2,CMS9                IT GETS PASSED TO THE PC.          03280000
  329.          ST    R5,NUMBYTES                                              03290000
  330. *                                                                       03300000
  331. CMS9     L     R14,XCMS14          RESTORE AND                          03310000
  332.          BR    R14                   RETURN.                            03320000
  333. XCMS14   DS    F                                                        03330000
  334.          EJECT                                                          03340000
  335. *---------------------------------------------------------------------* 03350000
  336. * THIS ROUTINE CALLED VIA BALR R14,R15 MAKES THE FS CALLS FOR FT3270. * 03360000
  337. *   ON ENTRY: R2 IS MACRO TO INVOKE (1 = READ, 2 = WRITE, 3 = CLOSE)  * 03370000
  338. *             R3 CONTAINS RECFM FOR FSWRITE (F OR V)                  * 03380000
  339. *             R6 CONTAINS NUMBER OF BYTES FOR FSWRITE                 * 03390000
  340. *            R10 CONTAINS THE BUFFER ADDRESS FOR THE READ/WRITE       * 03400000
  341. *   ON EXIT: R15 CONTAINS THE RETURN CODE FROM THE SVC 202            * 03410000
  342. *             R0 NUMBER OF BYTES READ IN THE CASE OF FSREAD           * 03420000
  343. *   REGISTERS 4 THROUGH 14 ARE PRESERVED THROUGH THIS ROUTINE.        * 03430000
  344. *---------------------------------------------------------------------* 03440000
  345. FTFS     DS    0H                                                       03450000
  346.          USING FTFS,R15                                                 03460000
  347.          STM   R4,R14,SAVEAREA     SAVE SOME OF THE CALLER'S THINGS.    03470000
  348.          DROP  R15                                                      03480000
  349.          USING FTFS,R12                                                 03490000
  350.          LR    R12,R15             USE THE NORMAL BASE REGISTER         03500000
  351. *                                                                       03510000
  352.          BCT   R2,FTFS1            IF R2 > 1 THEN SKIP FSREAD           03520000
  353.          FSREAD  FSCB=XFSCB,BUFFER=(R10),BSIZE=65536,FORM=E             03530000
  354.          B     FTFS9               SKIP OTHER CALLS                     03540000
  355. *                                                                       03550000
  356. FTFS1    BCT   R2,FTFS2            IF NEW R2 > 1 THEN SKIP FSWRITE      03560000
  357.          FSWRITE FSCB=XFSCB,BUFFER=(R10),BSIZE=(R6),RECFM=(R3),FORM=E   03570000
  358.          B     FTFS9               SKIP FSCLOSE                         03580000
  359. *                                                                       03590000
  360. FTFS2    FSCLOSE FSCB=XFSCB                                             03600000
  361. FTFS9    LM    R4,R14,SAVEAREA     GET OUR REGISTERS BACK               03610000
  362.          BR    R14                 RETURNING INFO IN R15 & R0           03620000
  363.          EJECT                                                          03630000
  364. *---------------------------------------------------------------------* 03640000
  365. *        SAVE AREA, VARIABLES, & FSCB                                 * 03650000
  366. *---------------------------------------------------------------------* 03660000
  367. SAVEAREA DS    18F                                                      03670000
  368. XBLKSIZE DS    1F             BLOCKSIZE ON CMS MINIDISK IN QUESTION     03680000
  369. RETCODE  DC    F'0'           SAVE THE RETURN CODE.                     03690000
  370. REPLACE  DS    CL(1)          INDICATES WHETHER TO REPLACE FILE.        03700000
  371. XFSCB    FSCB  '                  ',FORM=E                              03710000
  372. *                                                                       03720000
  373.          LTORG                                                          03730000
  374.          EJECT                                                          03740000
  375. *---------------------------------------------------------------------* 03750000
  376. *     THESE VARIABLES ARE USED BY THE CALLER AS WELL                  * 03760000
  377. *---------------------------------------------------------------------* 03770000
  378. FTCOMMON DSECT                                                          03780000
  379. *                                                                       03790000
  380. BYTELEFT DS    1F             AVAILABLE SPACE ON SAME                   03800000
  381. NUMBYTES DS    1F             SIZE OF FILE TO BE DOWNLOADED             03810000
  382. XNOREC   DS    1F             NUMBER OF RECORDS TO DOWNLOAD             03820000
  383. CLRECL   DS    1F             LENGTH FOR FIXED LENGTH UPLOAD            03830000
  384. FSPECLEN DS    1F             LENGTH OF NAME OF DOS FILESPEC            03840000
  385. CRECFM   DS    1F             RECFM FOR UPLOAD                          03850000
  386. BINTEXT  DS    CL(1)          INDICATES WHETHER TO PERFORM CONVERSION   03860000
  387. UPDOWN   DS    CL(1)          WHETHER UPLOAD OR DOWNLOAD                03870000
  388.          DS    0F                                                       03880000
  389. NEGO     DS    CL(87)         THE NEGOTIATION BUFFER                    03890000
  390.          PRINT NOGEN                                                    03900000
  391.          ADT                                                            03910000
  392.          NUCON                                                          03920000
  393.          REGEQU                                                         03930000
  394.          END                                                            03940000
  395.